package com.zhr.mybatis;

import com.zhr.mybatis.mapper.CacheMapper;
import com.zhr.mybatis.mapper.EmpMapper;
import com.zhr.mybatis.pojo.Emp;
import com.zhr.mybatis.utils.SqlSessionUtils;
import org.apache.ibatis.session.SqlSession;

import java.util.Arrays;
import java.util.List;

public class TestEmp {
    /**
     * mybatis 的一级缓存是sqlSession级别的，即通过同一个SqlSession查询的数据会被缓存
     * 再次使用同一个sqlSession查询同一条数据，会从缓存中读取。
     * 使一级缓存失效的四种情况：
     * 不同的sqlSession对应不同的一级缓存
     * 同一个sqlSession但是查询条件不同
     * 同一个sqlSession两次查询期间执行了任何一个增删改操作
     * 同一个sqlSession两次查询期间手动清空了缓存
     *
     *  mybatis 设置二级缓存
     *  二级缓存是SqlSessionFactory级别的，即通过同一个SqlSessionFactory所获取的sqlSession对象查询的数据会被缓存，在通过同一个
     *  sqlSessionFactory所获取的sqlSession查询相同的数据会从缓存中获取
     *  在映射文件中配置<cache/>
     *  查询的数据所转换的实体类型必须实现序列化接口
     *  使二级缓存失效的情况
     *  在两次查询操作之间执行了任意的增删改，会使一级和二级缓存同时失效
     *  sqlSession关闭之后一级缓存中的数据会保存到二级缓存中
     * */
    public static void main(String[] args) {
        SqlSession intersession = SqlSessionUtils.intersession();
        CacheMapper mapper = intersession.getMapper(CacheMapper.class);
        System.out.println(mapper.getEmpById(1));
    }
}
